# -*- coding = utf-8 -*-
# @Time : 2022/1/5 16:03
# @Author : LiAo
# @File : 爬取豆瓣图书top250图片.py
# @Software : PyCharm
import urllib.request
import urllib.parse
from lxml import etree
import os


def main():
    url = "https://movie.douban.com/top250?start="
    BM = int(input("您想要爬电影还是书籍TOP？  (1)书籍 (2)电影"))
    if BM == 1:
        url = "https://book.douban.com/top250?start="
        print("开始爬取书籍。")
    elif BM == 2:
        print("开始爬取电影。")
    else:
        print("请输入正确的数值")
    getURL(url, BM)  # 获得图片的url并且下载


def getURL(url, BM):
    a = input("请输入想创建的文件夹: ")
    b = os.getcwd()  # 获取当前位置
    Files = os.path.exists(r'./' + a)
    if Files == True:
        print("文件夹已经存在。")
    else:
        print("已经帮您创建文件夹。")
        os.mkdir(b + '/' + a)
    y = 0  # 保存书籍的数量
    for i in range(0, 10):  # 因为豆瓣一页显示25个对象，所以这里循环10次
        base_url = url + str(i * 25)  # 从0开始，一次25
        # 获取网页信息
        HTMLS = getHTML(base_url)  # 变量接收网页数据
        tree = etree.HTML(HTMLS)  # 设置变量，调用xpath工具
        url_list = tree.xpath('//a/img/@src')  # 获得网址
        if BM == 1:
            name_list = tree.xpath('//div/a/@title')  # 获得书籍名称
        else:
            name_list = tree.xpath('//a/img/@alt')  # 获得电影 名称
        # 因为一次爬取了25个对象，所以循环也是25次 25 * 10 = 250
        for x in range(0, 25):
            y += 1  # 每当循环一次，加一。
            urllib.request.urlretrieve(url=url_list[x], filename='%s/%s/'%(b,a) + '%s-%s' % (y, name_list[x]) + '.jpg')


def getHTML(base_url):
    header = {  # UA请求头
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 95.0.4638.69Safari / 537.36Edg / 95.0.1020.44"
    }
    # 请求对象定制
    request = urllib.request.Request(url=base_url, headers=header)
    # 模拟浏览器访问服务器
    reponse = urllib.request.urlopen(request)
    # 获取网页源码
    content = reponse.read().decode('utf-8')
    # 函数返回html
    return content


if __name__ == "__main__":
    print('开始爬取')
    main()
    print("爬取完毕")
